# 需求：打开注册A页面，完成以下操作
# 1).使用隐式等待定位用户名输入框，如果元素存在，就输入admin
# 核心：隐式等待用于解决页面加载延迟导致的元素定位失败问题，提高脚本稳定性

# 从time模块导入sleep函数，用于程序强制暂停（仅用于最后观察效果，非必需）
from time import sleep
# 从selenium库导入webdriver模块，用于创建浏览器驱动、控制浏览器
from selenium import webdriver
# 从selenium导入Keys类（此处未实际使用，保留原导入，可根据后续扩展启用）
from selenium.webdriver.common.keys import Keys
# 导入By类（适配新版selenium，替代已弃用的find_element_by_*方法）
from selenium.webdriver.common.by import By

# 1. 初始化并打开Chrome浏览器
# executable_path：指定ChromeDriver驱动的本地绝对路径（适配selenium3及以下版本）
# 驱动作用：建立Python代码与Chrome浏览器的通信桥梁，实现对浏览器的控制
driver = webdriver.Chrome(executable_path='D:/chrome_driver/chromedriver.exe')
# 注释：selenium4及以上版本推荐写法（无需手动指定驱动路径）
# 需提前安装 webdriver-manager 库（pip install webdriver-manager），自动匹配浏览器版本下载驱动
# driver = webdriver.Chrome() # 创建Chrome浏览器对象，后续通过该对象执行所有操作

# 放大浏览器窗口
# maximize_window()：将窗口调整为屏幕最大尺寸，避免元素因窗口过小被隐藏，提高定位稳定性
driver.maximize_window()

# 2. 设置隐式等待（关键操作）
# implicitly_wait(10)：设置全局隐式等待时间为10秒
# 作用机制：
#   - 当执行元素定位操作时，若元素未立即找到，selenium会在10秒内持续轮询查找该元素
#   - 10秒内找到元素：立即继续执行后续代码
#   - 10秒内未找到元素：抛出NoSuchElementException异常
#   - 注意：隐式等待是全局设置，对所有元素定位操作生效（仅需设置一次）
driver.implicitly_wait(10)

# 3. 访问目标页面（注册A页面）
# get()方法：接收完整网络URL，让浏览器加载并显示该网页
# 注：隐式等待不会等待页面完全加载完成（仅对元素定位生效），若需等待页面加载，可配合sleep或显式等待
driver.get("http://121.43.169.97:8848/pageA.html")

# 4. 核心操作：定位用户名输入框并输入admin
# 修复1：原定位器#user错误（根据之前需求，注册A页面用户名输入框id为userA，非user）
# 修复2：替换已弃用的find_element_by_css_selector，使用新版By.CSS_SELECTOR定位（兼容selenium4+）
# 定位逻辑：通过CSS_SELECTOR定位id为"userA"的输入框（#表示id选择器，唯一性强，定位高效）
# send_keys("admin")：向定位到的输入框输入文本"admin"
driver.find_element(By.CSS_SELECTOR, "#userA").send_keys("admin")

# 暂停3秒：仅用于观察输入效果（实际项目中可删除，隐式等待已处理元素加载）
sleep(3)

# 5. 关闭浏览器并释放资源
# quit()：关闭所有浏览器窗口，终止驱动进程，彻底释放内存和端口资源（推荐使用）
driver.quit()